﻿  <!DOCTYPE HTML>
  <html lang="zh">
  <head>
  <title>变量和表达式 - 定义 &amp; 使用 | AutoHotkey v2</title>
  <meta name="description" content="Learn details about variables, expressions, operators, built-in variables and capacity and memory of variables." />
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <link href="static/theme.css" rel="stylesheet" type="text/css" />
  <script src="static/content.js" type="text/javascript"></script>
  <script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
  </head>
  <body>

  <h1>变量和表达式</h1>

  <h2 id="Table_of_Contents">目录</h2>
  <ul>
    <li><a href="#Intro">变量</a></li>
    <li><a href="#Expressions">表达式</a></li>
    <li><a href="#Operators">表达式中的运算符</a></li>
    <li><a href="#BuiltIn">内置变量</a></li>
    <li><a href="#cap">变量的容量和占用内存</a></li>/|#|
  </ul>
  <span id="Variables"></span><h2 id="Intro">变量</h2>
  <p>有关一般说明和变量如何工作的详细信息, 请参阅<a href="Concepts.htm#variables">变量</a>.</p>
  <p id="assigning"><strong>给变量赋值</strong>: 要将字符串或数字存储在变量中, 使用<a href="commands/SetExpression.htm">冒号-等号运算符(:=)</a> 后跟着数字, 加引号的字符串或其他类型的<a href="Language.htm#expressions">表达式</a>. 例如:</p>
  <pre>MyNumber := 123
  MyString := &quot;这是原义字符串.&quot;
  CopyOfVar := Var</pre>
  <p>未赋值的变量默认赋值为空字符串. 因此, 要删除变量的内容, 只需赋值一个空字符串:</p>
  <pre>变量 :=  &quot;&quot;</pre>
  <p>通过将变量用作函数的<em>输出变量</em>, 还可以间接地为变量赋值. 例如:</p>
  <pre><a href="commands/MouseGetPos.htm">获取鼠标位置</a> <strong>x</strong>, <strong>y</strong></pre>
  <p id="retrieving"><strong>检索变量的内容</strong>: 若要将变量的内容包含在字符串中, 请使用<a href="#concat">连接</a>或 <a href="commands/Format.htm">格式化字符串</a>. 例如:</p>
  <pre><a href="commands/MsgBox.htm">信息框</a> "变量的值是 " . Var . "."
  信息框 "变量 Var 中的值为 " Var "."
  信息框 格式化字符串("Var has the value {1}.", Var)
  </pre>
  <p>子表达式可以以同样的方式与字符串组合. 例如:</p>
  <pre>信息框(&quot;X 和 Y 的和是 &quot; . (X + Y))
  </pre>
  <p><strong>变量的比较</strong>: 请阅读下面表达式部分中关于不同类型比较的重要提示.</p>
  <h2 id="Expressions">表达式</h2>
  <p class="note">有关结构化概述和进一步说明, 请参阅<a href="Language.htm#expressions">表达式</a>.</p>
  <p>表达式用于对一系列变量, 原义字符串和/或原义数字执行一个或多个运算.</p>
  <p>表达式中的普通单词被解释为变量名. 因此, 原义的字符串必须用双引号括起来, 以便与变量区分开来. 例如:</p>
  <pre>如果 (CurrentSetting &gt; 100 or FoundColor != &quot;Blue&quot;)
      信息框 "设置太高或出现错误的颜色."</pre>
  <p>在上面的例子中, &quot;Blue&quot; 出现在引号中, 因为它是一个原义的字符串. 单引号(&apos;) 和双引号(&quot;) 的作用是相同的, 除了用单引号括起来的字符串可以包含原义双引号, 反之亦然. 因此, 要在原义字符串中包含 <em>真实的</em> 引号, 可以<a href="misc/EscapeChar.htm">转义</a>引号或将字符串括在相反类型的引号中. 例如:</p>
  <pre>信息框 &quot;她说, <span class="red">`&quot;</span>一天一个苹果.<span class="red">`&quot;</span>&quot;
  信息框 <span class="red">&apos;</span>她说, &quot;一天一个苹果.&quot;<span class="red">&apos;</span></pre>
  <p><strong>空字符串</strong>: 若要在表达式中指定空字符串, 请使用一对空的双引号. 例如, 当 <em>MyVar</em> 非空时, 语句 <code>如果 (MyVar != &quot;&quot;)</code> 的结果为真.</p>
  <p><strong>保存表达式的结果</strong>: 要把结果赋值给变量, 请使用 <a href="commands/SetExpression.htm">:= 运算符</a>. 例如:</p>
  <pre>NetPrice := Price * (1 - Discount/100)</pre>
  <p id="Boolean"><strong>布尔值</strong>: 若要计算表达式结果为真还是假时(如 如果-语句), 结果为空或零被视为假(false), 而其他所有结果都视为真(true). 例如, 仅当 ItemCount 为空或 0 时, 语句 <code>如果 ItemCount</code> 的结果才为假. 类似的, 表达式 <code>如果 not ItemCount</code> 将产生相反的结果.</p>
  <p>诸如 <b>NOT</b>/<b>&gt;</b>/<b>=</b>/<b>&lt;</b> 之类的运算符自动生成一个真值或假值: 真值时结果为 1, 而假值时为 0. 然而, <b>AND</b>/<b>OR</b> 运算符总是生成一个输入值. 例如, 在以下表达式, 如果 内_循环次数 大于 5, 变量 <em>Done</em> 赋值为 1, 其他情况下为 <em>FoundIt</em> 的值:</p>
  <pre>Done := 内_循环次数 &gt; 5 or FoundIt</pre>
  <p>如上所述, 可以通过将变量设为空或赋值为 0, 来使变量来保存假值. 利用这种特性, 可以使用简写语句 <code>如果 Done</code> 来检查变量 Done 是真还是假.</p>
  <p><span id="True"></span><span id="False"></span>在表达式中, 关键字 <em>true</em> 和 <em>false</em> 解析为 1 和 0. 使用它们可以使脚本更易于阅读, 如以下示例所示:</p>
  <pre>CaseSensitive := false
  ContinueSearch := true</pre>
  <p id="numbers"><strong>整数和浮点数</strong>: 在表达式中, 如果数字包含小数点或科学计数符号, 则认为它们是浮点数; 否则, 否则视为整数. 对于大多数运算符 -- 如加法和乘法 -- 只要其中的一个输入是浮点数, 那么结果也将是浮点数.</p>
  <p>在表达式和非表达式中, 整数都可以用十六进制或十进制格式书写. 十六进制数总是以前缀 0x 开头. 例如, <code>等待 0xFF</code> 等同于 <code>等待 255</code>. 浮点数可以选择用科学记数法书写, 带或不带小数点(例如 <code>1e4</code> 或 <code>-2.1E-4</code>).</p>
  <p>在脚本开始执行之前, 在表达式中, 未加双引号的原义数字(如 <code>128</code>, <code>0x7F</code> 和 <code>1.0</code>), 被转换为纯数字, 因此将数字转换为字符串可能会产生与原始文字值不同的值. 例如:</p>
  <pre>信息框(0x7F)  <em>; 显示 128</em>
  信息框(1.00)  <em>; 显示 1.0</em></pre>

  <h2 id="Operators">表达式中的运算符</h2>
  <p class="note">有关运算符的一般信息, 请参阅<a href="Language.htm#operators">运算符</a>.</p>
  <p>除了下面提到的, 数学运算中涉及的任何空值(空字符串) 或非数字值都<strong>不会</strong>假定为零. 相反, 会抛出异常. 如果未使用 <a href="commands/Try.htm">Try</a>, 默认情况下, 未处理的异常将导致一个错误对话框.</p>

  <h3 id="operators">表达式运算符(按优先级降序排列)</h3>
  <table class="info">
    <tr id="ref">
      <td style="text-align:center; white-space:nowrap"><strong>%Expr%</strong></td>
      <td>
        <p>计算子表达式 <em>Expr</em>, 并将其值用作变量, 函数, 属性或方法的名称或部分名称. 这允许脚本引用一个名称未在脚本中文字写入的变量, 函数, 属性或方法, 而该名称是通过计算 <em>Expr</em>(通常是另一个变量) 确定的. 由于会产生歧义, 百分号不能在 <em>Expr</em> 中直接使用, 但是可以嵌套在括号中. 另外, <em>Expr</em> 可以是任何表达式.</p>
        <p>如果有任何与 <em>%Expr%</em> 相邻的序列和部分<a href="Concepts.htm#names">变量名</a>(它们之间没有任何空格或其他字符), 则将它们组合成单个名称.</p>
        <p><code>%Expr%()</code> 执行<a href="Functions.htm#DynCall">动态函数调用</a>.</p>
        <p><code>x.%Expr%</code> 访问对象 <em>x</em> 的属性, <code>x.%Expr%()</code> 调用方法.</p>
        <p>否则, <code>%Expr%</code> 将根据名称动态检索变量. 子表达式 <em>Expr</em> 的<u>结果</u>必须是要检索的变量的名称或部分名称.</p>
        <p>如果该变量不存在, 则创建一个空白变量. 如果名称<a href="Concepts.htm#names">无效</a>, 则抛出<a href="commands/Throw.htm#Exception">异常</a>.</p>
        <p>这通常用于引用<a href="misc/Arrays.htm#pseudo">伪数组</a>中的元素.</p>
        <p>尽管这在早期被称为 "双重解引", 但是当 <em>Expr</em> 不包含变量(第一重解引), 以及当结果变量(第二重解引) 是赋值的目标时, 该术语是不准确的.</p>
      </td>
    </tr>
    <tr id="objdot">
      <td style="text-align:center"><strong>x.y</strong></td>
      <td><strong>成员访问</strong>. 获取或设置一个值或调用对象 <i>x</i> 的方法, 此处 <i>y</i> 是个原义名称. 请参阅<a href="Objects.htm#Usage_Objects">对象语法</a>.</td>
    </tr>
    <tr id="IncDec">
      <td style="text-align:center"><strong>++<br>
      --</strong></td>
      <td>
        <p><strong>前置和后置的自增/自减</strong>. 从变量中增加或减去 1. 运算符可以放在变量名的前面或后面. 如果放在变量名的 <em>前面</em>, 则执行自增/减运算并把结果用于下一运算(在这种情况下结果是一个变量引用). 例如, <code>变量 := ++X</code> 递增 X 然后将其值赋给 <em>Var</em>. 相反, 如果运算符放在变量名的 <em>后面</em>, 结果是在执行运算之前的 X 值. 例如, <code>变量 := X++</code> 递增 X, 但 <em>Var</em> 接收 X 在递增之前的值.</p>
        <p>这些运算符还可以与对象的属性一起使用, 如 <code>myArray.Length++</code> 或 <code>--myArray[i]</code>. 在这些情况下, 子表达式的结果总是一个数字, 而不是一个变量引用.</p>
      </td>
    </tr>
    <tr id="pow">
      <td style="text-align:center"><strong>**</strong></td>
      <td>
        <p><strong>幂</strong>. 示例用法: <code>base**exponent</code>. 底数(<em>base</em>) 和指数(<em>exponent</em>) 都可以为小数. 如果<em>指数</em> 为负数, 即使<em>底数</em> 和<em>指数</em> 都为整数, 结果也会被格式化为浮点数. 因为 ** 的优先级高于一元负号, 所以, <code>-2**2</code> 的计算过程和 <code>-(2**2)</code> 一样, 且得到结果 -4. 因此, 要计算原义负数的幂, 需要把它们包围在括号中, 如 <code>(-2)**2</code>.</p>
        <p>幂运算符是右结合的. 例如, <code>x ** y ** z</code> 计算为 <code>x ** (y ** z)</code>.</p>
        <p class="note"><strong>注意</strong>: 不支持<em>底数</em> 为负数且<em>指数</em> 为小数的情况, 如 <code>(-2)**0.5</code>; 尝试它将导致抛出异常. 但 <code>(-2)**2</code> 和 <code>(-2)**2.0</code> 都是支持的. 如果<em>底数</em> 和<em>指数</em> 都为 0, 结果未定义并抛出异常.</p>
      </td>
    </tr>
    <tr id="unary">
      <td style="text-align:center"><strong>-<br>
      !<br>
      ~</strong></td>
      <td>
        <p><strong>一元负号(-)</strong>: 反转其运算元的符号.</p>
        <p><strong>一元正号(+)</strong>: <code>+N</code> 等同于 <code>-(-N)</code>. 应用于纯数字时无效, 但可用于将数字字符串转换为纯数字.</p>
        <p><strong>逻辑非(!)</strong>: 如果运算元为空或 0, 那么逻辑非的结果为 1, 这表示 &quot;true&quot;. 否则, 结果为 0(false). 例如: <code>!x or !(y and z)</code>. 注意: 单词 NOT 和 <strong>!</strong> 含义相同, 但 <strong>!</strong> 优先级更高. 允许使用连续的一元运算符, 例如 <code><strong>!!</strong>Var</code>, 因为它们是按从右到左的顺序计算.</p>
        <p><strong>按位非(~)</strong>: 此运算符对运算元按位取反. 当使用 64 位有符号整数时, 正的输入值始终给出负的结果, 反之亦然. 例如, <code>~0xf0f</code> 等于 -0xf10(-3856), 二进制等于 0xfffffffffffff0f0. 如果希望使用无符号的 32 位值, 可以使用 <code><i>result</i> &amp; 0xffffffff</code> 截断结果. 如果操作数是一个浮点值, 则抛出异常.</p>
      </td>
    </tr>
    <tr id="MulDiv">
      <td style="text-align:center"><strong>*<br>
      /<br>
      //
      </strong></td>
      <td><p><strong>乘(*)</strong>: 如果两个输入都为整数, 则结果为整数; 否则结果为浮点数.</p>
        <p><strong>其他用途</strong>: 星号(*) 运算符也用于<a href="Functions.htm#VariadicCall">可变参数函数调用</a>.</p>
        <p id="divide"><strong>真除(/)</strong>: 即使两个输入都是整数, 真除的结果也为浮点数. 例如, <code>3/2</code> 结果为 1.5 而不是 1, 而 <code>4/2</code> 结果为 2.0 而不是 2.</p>
        <p id="IntegerDivide"><strong>整数除法(//)</strong>: 如果两个输入都是整数, 那么双斜杠运算符使用高效的整数除法. 例如, <code>5//3</code> 结果为 1 而 <code>5//-3</code> 结果为 -1. 如果任何一个输入为浮点格式, 则抛出异常. 有关取模, 请参阅 <a href="commands/Math.htm#Mod">余数</a>.</p>
      <p><a href="#AssignOp">*= 和 /= 运算符</a>是用变量的值乘以或除以另一个值的一种简写形式. 例如, <code>Var*=2</code> 和 <code>Var:=Var*2</code>会得到相同的结果(不过前者执行的更好).</p>
      <p>除数为零, 则导致抛出异常.</p></td>
    </tr>
    <tr id="AddSub">
      <td style="text-align:center"><strong>+<br>
      -</strong></td>
      <td><p><strong>加(+)</strong> 和 <strong>减(-)</strong>. 在相关的注释中, <a href="#AssignOp"><strong>+=</strong> 和 <strong>-=</strong> 运算符</a>是变量增加或减少的一种简写形式. 例如, <code>Var+=2</code> 和 <code>Var:=Var+2</code> 会得到相同的结果(不过前者执行的更好). 类似地, 变量可以通过使用 <a href="#IncDec">Var++, Var--, ++Var 或 --Var</a> 来增加或减少 1.</p>
        <p><strong>其他用途</strong>: 如果 + 或 - 符号前面没有一个值(或生成值的子表达式), 则将其解释为<a href="#unary">一元运算符</a>.</p>
      </td>
    </tr>
    <tr id="bitshift">
      <td style="text-align:center"><strong>&lt;&lt;<br>
      &gt;&gt;</strong></td>
      <td>
        <p><strong>按位左移(&lt;&lt;)</strong> 和 <strong>右移(&gt;&gt;)</strong>. 用法示例: <code>Value1 &lt;&lt; Value2</code>. 左移(<strong>&lt;&lt;</strong>) 相当于 <em>Value1</em> 乘以 &quot;2 的 <em>Value2</em> 次幂&quot;. 右移(<strong>&gt;&gt;</strong>) 相当于 <em>Value1</em> 除以 &quot;2 的 <em>Value2</em> 次幂&quot; 并将结果四舍五入到数轴左侧最接近的整数; 例如, <code>-3&gt;&gt;1</code> 结果为 -2. 如果 <em>Value2</em> 小于 0 或大于 63(截断后), 则抛出异常.</p>
        <p>如果任何一个输入是浮点数, 则抛出异常.</p>
      </td>
    </tr>
    <tr id="bitwise">
      <td style="text-align:center"><strong>&amp;<br>
        ^<br>
        |
      </strong></td>
      <td>
        <p><strong>按位与(&amp;)</strong>, <strong>按位异或(^)</strong> 和 <strong>按位或(|)</strong>. 这三个运算符中, <strong>&amp;</strong> 优先级最高, 而 <strong>|</strong> 优先级最低. 任何浮点输入在计算前会被截取成整数.</p>
        <p>相关: <a href="#unary">按位非(~)</a></p>
        <p><strong>其他用途</strong>: 如果 &amp; 符号前面没有一个值(或生成值的子表达式), 则将其解释为<a href="#unary">取址运算符</a>.</p>
      </td>
    </tr>
    <tr id="concat">
      <td style="text-align:center"><strong>.</strong></td>
      <td>
        <p><strong>连接</strong>. 每边至少有一个空格或制表符的句点(点) 用于将两个项组合成单个字符串. 您还可以省略句点以获得相同的结果(除非有歧义, 如 <code>x <strong>-</strong>y</code>, 或者右边的项有一个前导的 ++ 或 --). 当省略点时, 要合并的项之间必须至少有一个空格或制表符.</p>
        <pre>变量 := "The color is " <strong>.</strong> FoundColor  <em>; 显式连接</em>
  变量 := "The color is " FoundColor    <em>; 自动连接</em>
  </pre>
        <p>还可以用来连接子表达式. 例如: <code>变量 := "The net price is " <strong>.</strong>  Price * (1 - Discount/100)</code>.</p>
        <p>以句点(或其他任何运算符) 开始的行会自动<a href="Scripts.htm#continuation">附加到</a>上一行的末尾.</p>
        <p>每个输入的整个<a href="commands/StrLen.htm">长度</a>会被使用, 即使它包含二进制零. 例如, <code>字符(0x2010) 字符(0x0000) 字符(0x4030)</code>(<code>附加 字符(0x2010) 字符(0x0000) 字符(0x4030), "apple.txt", "UTF-16"</code>) 生成以下字节的字符串(由于 UTF-16-LE 编码): 0x10, 0x20, 00, 00, 0x30, 0x40. 结果有一个额外的空结束符(二进制零), 它不包含在长度中.</p>
        <p><strong>其他用途</strong>: 如果句点右侧没有空格或制表符, 则将其解释为原义<a href="#numbers">浮点数</a>或<a href="#objdot">成员访问</a>. 例如, <code>1.1</code> 和 <code>(.5)</code> 是数字, <code>A_Args.Has(3)</code> 方法调用, 而 <code>A_Args.Length</code> 是一个属性访问.</p>
      </td>
    </tr>
    <tr id="regex">
      <td style="text-align:center"><strong>~=</strong></td>
      <td><a href="commands/RegExMatch.htm">正则匹配</a> 的简写形式. 例如, <code>"abc123" ~= "\d"</code> 结果为 4(首个数字字符串的位置).</td>
    </tr>
    <tr id="compare">
      <td style="text-align:center"><strong>&gt;&nbsp;&nbsp;&nbsp;&lt;<br>
      &gt;= &lt;=</strong></td>
      <td>
        <p><strong>大于(&gt;)</strong>, <strong>小于(&lt;)</strong>, <strong>大于或等于(&gt;=)</strong> 和 <strong>小于或等于(&lt;=)</strong>. 输入的数据是以数字方式进行比较的. 如果其中一个输入不是数字或数字字符串, 则抛出异常.</p>
      </td>
    </tr>
    <tr id="equal">
      <td style="text-align:center"><strong>=<br>
        ==<br>
        !=<br>
        !==</strong></td>
      <td>
        <p><strong>不区分大小写的等号(=) / 不等号(!=)</strong> 和 <strong>区分大小写的等号(==) / 不等号(!==)</strong>. 运算符 <strong>==</strong> 的行为和 <strong>=</strong> 是一样的, 除非其中一个输入不是数字(或都是字符串), 在这种情况下 <strong>==</strong> 总是区分大小写的, 而 <strong>=</strong> 总是不区分大小写的. <strong>!=</strong> 和 <strong>!==</strong> 与其对应的没有 <strong>!</strong> 的运算符是一样的, 只是其结果取反.</p>
        <p><strong>==</strong> 和 <strong>!==</strong> 运算符可用于比较包含二进制零的字符串. 除了 <strong>~=</strong> 之外的所有其他比较运算符仅比较到第一个二进制零.</p>
        <p>对于不区分大小写的比较, 只有 ASCII 字母 A-Z 才会被认为等同于它们的小写字母. 如果要根据当前用户区域规则进行比较, 请使用 <a href="commands/StrCompare.htm">比较字符串</a> 并为 <em>CaseSense</em> 参数指定 "Locale".</p>
      </td>
    </tr>
    <tr>
      <td align="center"><strong>IS</strong><br><strong>IN</strong><br><strong>CONTAINS</strong></td>
      <td id="is">
        <p>如果 <em>Value</em> 是 <em>Class</em> 的实例, 那么 <code><i>Value</i> <strong>is</strong> <i>Class</i></code> 结果为 true(1),  否则为 false(0). <em>Class</em> 必须是一个<a href="objects/Object.htm">对象</a>, 并具有 <a href="objects/Class.htm#Prototype">Prototype</a> 自有属性, 但通常该属性是由类定义隐式定义的. 这个操作一般等同于 <code><i>Value</i>.是否基于(<i>Class</i>.Prototype)</code>, 只是值不能覆盖它的处理方式, 而且对于 COM 对象来说, 结果总是 false.</p>
        <p><code id="in"><strong>in</strong></code> 和 <code id="contains"><strong>contains</strong></code> 保留给将来使用.</p>
      </td>
    </tr>
    <tr id="not">
      <td style="text-align:center"><strong>NOT</strong></td>
      <td><strong>逻辑非</strong>. 除了优先级较低外, 其他的与 <strong>!</strong> 运算符相同. 例如, <code>not (x = 3 or y = 3)</code> 等同于 <code><strong>!</strong>(x = 3 or y = 3)</code>.</td>
    </tr>
      <tr id="and">
        <td style="text-align:center"><strong>AND<br>
        &amp;&amp;</strong></td>
        <td><p>这两个运算符都是<strong>逻辑与</strong>. 例如: <code>x &gt; 3 and x &lt; 10</code>.</p>
          <p>在表达式中, <strong>所有</strong> 运算元都解析为 <em>True</em>, 则返回 <strong>最后</strong >解析为 <em>True</em> 的运算元. 否则, 返回 <strong>第一个</strong> 解析为 <em>False</em> 的运算元. 实际上, 只有当所有运算元都为 true 时, 结果才为 true. 布尔表达式需要进行<a href="Functions.htm#ShortCircuit">求值优化</a>(从左到右) 以提高性能.</p>
          <pre>A := 1, B := {}, C := 20, D := True, E := "String" <em>; <strong>所有</strong> 运算元都是真的并都要进行计算</em>
  信息框(A &amp;&amp; B &amp;&amp; C &amp;&amp; D &amp;&amp; E) <em>; 返回 <strong>最后</strong> 的为真的运算元("String")</em></pre>
          <pre>A := 1, B := "", C := 0, D := False, E := "String" <em>; B 为假的, C 和 D 为 false</em>
  信息框(A &amp;&amp; B &amp;&amp; ++C &amp;&amp; D &amp;&amp; E) <em>; 返回 <strong>第一个</strong> 为假的运算元(""). C, D 和 E 不被计算, 而 C 始终不会自增</em></pre>
          <p>以 <code>AND</code> 或 <code>&amp;&amp;</code>(或其他任何运算符) 开始的行会自动<a href="Scripts.htm#continuation">附加到</a>上一行的末尾.</p></td>
      </tr>
      <tr id="or">
        <td style="text-align:center"><strong>OR<br>
        ||</strong></td>
        <td><p>这两个运算符都是<strong>逻辑或</strong>. 例如: <code>x &lt;= 3 or x &gt;= 10</code>.</p>
          <p>在表达式中 <strong>至少</strong> 有一个运算元为 <em>True</em>, 则返回 <strong>第一个</strong> 解析为 <em>True</em> 的运算元. 否则, 则返回 <strong>最后</strong> 解析为 <em>False</em> 的运算元. 实际上, 只要有一个运算元为真, 结果就为真. 布尔表达式需要进行<a href="Functions.htm#ShortCircuit">求值优化</a>(从左到右) 以提高性能.</p>
          <pre>A := "", B := False, C := 0, D := "String", E := 20 <em>; <strong>至少</strong> 有一个运算元是真的. 直到 D(包括) 的所有运算元都要进行计算</em>
  信息框(A || B || C || D || ++E) <em>; 返回 <strong>第一个</strong> 为真的运算元("String"). E 不会进行计算并始终不会自增</em></pre>
          <pre>A := "", B := False, C := 0 <em>; <strong>所有</strong> 运算元都是假的并将进行计算 </em>
  信息框(A || B || C) <em>; 返回 <strong>最后</strong> 为假的运算元(0)</em></pre>
          <p>以 <code>OR</code> 或 <code>||</code>(或其他任何运算符) 开始的行会自动<a href="Scripts.htm#continuation">附加到</a>上一行的末尾.</p></td>
      </tr>
    <tr id="ternary">
      <td style="text-align:center"><strong>?:</strong></td>
      <td>
        <p><strong>三元运算符</strong>. 此运算符是 <a href="commands/If.htm">如果-else 语句</a>的简写形式. 它计算左侧的条件来决定两个分支中哪个作为最终结果. 例如, <code>变量 := x&gt;y ? 2 : 3</code>, 当 x 大于 y 时保存 2 到 <em>Var</em>; 否则保存 3. 为了提高性能, 只计算决定性的分支(请参阅<a href="Functions.htm#ShortCircuit">求值优化</a>).</p>
        <p class="warning"><strong>注意:</strong> 当在行的开头使用时, 三元条件通常应该用括号括起来, 以减少与其他类型语句的歧义. 有关详情, 请参阅<a href="Language.htm#expression-statements">表达式语句</a>.</p>
      </td>
    </tr>
    <tr id="AssignOp">
      <td style="text-align:center"><strong>:=<br>
          +=<br>
          -=<br>
          *=<br>
          /=<br>
          //=<br>
          .=<br>
          |=<br>
          &amp;=<br>
          ^=<br>
          &gt;&gt;=<br>
          &lt;&lt;=</strong>
      </td>
      <td><p><strong>赋值</strong>. 对变量的内容进行运算, 然后把结果保存到同一个变量中. 最简单的赋值运算符为<a href="commands/SetExpression.htm">冒号等号(:=)</a>, 它把表达式的结果保存到变量中. 关于其他运算符的功能说明, 请参阅这个表格中它们的相关条目. 例如, <code>Var //= 2</code> 执行<a href="#IntegerDivide">整数除法</a>把 <em>Var</em> 除以 2, 然后把结果保存回 <em>Var</em>. 类似的, <code>Var <strong>.=</strong> &quot;abc&quot;</code> 为 <code>变量 := Var <strong>.</strong> &quot;abc&quot;</code> 的一种简写形式.</p>
        <p>与其他大多数运算符不同, 赋值运算是从右往左执行的. 因此, <code>Var1 := Var2 := 0</code> 这个语句中首先把 0 赋值给 <em>Var2</em>, 然后把 <em>Var2</em> 赋值给 <em>Var1</em>.</p>
      <p>如果赋值作为某些其他运算符的输入, 它的值是变量本身. 例如, 如果 <em>Var</em> 的新增值大于 50, 表达式 <code>(Var+=2) &gt; 50</code> 为真. 这样还允许赋值作为 <a href="Functions.htm#ByRef">ByRef</a> 去传递, 或获取它的地址; 例如: <code>字符串指针(x:=&quot;abc&quot;)</code>.</p>
      <p>需要避免语法错误或提供更直观的操作时, 会自动提升赋值运算符的优先级. 例如: <code>not x:=y</code> 等同于 <code>not (x:=y)</code>. 类似的, <code>++变量 := X</code> 等同于 <code>++(变量 := X)</code>; 而 <code>Z&gt;0 ? X:=2 : Y:=2</code> 等同于 <code>Z&gt;0 ? (X:=2) : (Y:=2)</code>.</p>
      <p>赋值还可以针对对象的属性, 如 <code>myArray.Length += n</code> 或 <code>myArray[i] .= t</code>. 当赋值给一个属性时, 子表达式的结果是赋值的值, 而不是变量引用.</p>
      </td>
    </tr>
    <tr id="fat-arrow">
      <td><strong>() =&gt;</strong> <em>expr</em></td>
      <td>
        <p><strong>胖箭头函数</strong>. 定义一个简单的<a href="Functions.htm">函数</a>并返回一个 <a href="objects/Func.htm">检索函数</a> 或<a href="Functions.htm#closures">闭包</a>对象. 将函数的<a href="Functions.htm#param">参数列表</a>(可以在前面加上函数名) 写在操作符的左边. 当函数被调用时(通过返回的引用), 它计算子表达式 <em>expr</em> 并返回结果.</p>
        <p>下面两个例子是等价的:</p>
        <pre>sumfn := Sum(a, b) =&gt; a + b</pre>
        <pre>Sum(a, b) {
      返回 a + b
  }
  sumfn := 检索函数("Sum")</pre>
        <p>在这两种情况下, 函数都是在脚本启动时<strong>无条件</strong>定义的, 但是函数引用只有在赋值时才存储在 <em>sumfn</em> 中.</p>
        <p>如果函数名被省略, 而参数列表只包含一个参数名, 则可以省略圆括号. 下面的例子定义了一个带有一个参数 <code>a</code> 的匿名函数, 并将其引用存储在变量 <code>double</code> 中:</p>
        <pre>double := a =&gt; a * 2</pre>
        <p><em>expr</em> 中的变量引用的解析方法与完整函数定义中的方法相同. 例如, <em>expr</em> 可以引用 outer 函数的局部变量(就像在任何<a href="Functions.htm#nested">嵌套函数</a>中一样), 在这种情况下, 每当计算胖箭头表达式时, 都会创建一个新的<a href="Functions.htm#closures">闭包</a>并返回它. 如果是嵌套在另一个函数中的函数, 则其是<a href="Functions.htm#AssumeLocal">假定-局部</a>函数, 否则它是<a href="Functions.htm#AssumeGlobal">假定-全局</a>函数.</p>
        <p>为函数指定名称允许递归地调用它或由其他嵌套函数调用它, 而无需在其内部存储对<a href="Functions.htm#closures">闭包</a>的引用(从而创建有问题的<a href="Objects.htm#Circular_References">循环引用</a>). 它还有助于调试, 比如 <a href="objects/Func.htm#Name">检索函数.Name</a> 或显示在调试器的调用堆栈上.</p>
        <p>胖箭头语法也可以用来定义简写的<a href="Objects.htm#Custom_Classes_property_short">属性</a>和<a href="Objects.htm#Custom_Classes_method">方法</a>.</p>
      </td>

    </tr>
    <tr id="comma">
      <td style="text-align:center"><strong>,</strong></td>
      <td><p><strong>逗号(多语句)</strong>. 逗号可以用来在单行中书写多个子表达式. 最常用于把多个赋值或函数调用聚集在一起. 例如: <code>x:=1<strong>,</strong> y+=2<strong>,</strong> ++index, MyFunc()</code>. 这样的语句按从左到右的顺序执行.</p>
        <p class="note"><strong>注意</strong>: 以逗号(或其他任何运算符) 开始的行会自动<a href="Scripts.htm#continuation">附加到</a>上一行的末尾. 另请参阅: <a href="#CommaPerf">逗号的性能</a>.</p>
        <p>逗号还用于分隔函数调用的或控制流语句的参数. 若要在参数列表中包含多语句表达式, 请用一组额外的圆括号将其括起来. 例如, <code>MyFn((x, y))</code> 计算 x 和 y, 但传递 y 作为 MyFn 的第一个也是唯一一个参数.</p>
      </td>
    </tr>
  </table>
  <p>下面列出的子表达式类型覆盖计算的优先级/顺序:</p>
  <table class="info">
    <tr>
      <td style="text-align:center"><strong>(</strong><em>expression</em><strong>)</strong></td>
      <td><p>括号中包含的任何子表达式. 例如, <code>(3 + 2) * 2</code> 强制首先计算 <code>3 + 2</code>.</p></td>
    </tr>
    <tr>
      <td style="text-align:center; white-space:nowrap"><p><strong>余数<br>
          四舍五入<br>
      绝对值</strong></p></td>
      <td><strong>函数调用</strong>. 函数名后面必须紧跟一个左圆括号, 没有任何空格或制表符插入其间. 有关详情, 请参阅<a href="Functions.htm">函数</a>.</td>
    </tr>
    <tr>
      <td style="text-align:center; white-space:nowrap"><p><strong>%</strong><em>检索函数</em><strong>%()</strong></p></td>
      <td>请参阅<a href="Functions.htm#DynCall">动态调用函数</a>.</td>
    </tr>
    <tr>
      <td style="text-align:center">Fn(<strong><em>Params</em>*</strong>)</td>
      <td><p><a href="Functions.htm#VariadicCall">可变参数函数调用</a>. <em>Params</em> 是一个可枚举的对象(具有 <a href="Objects.htm#__Enum">__Enum</a> 方法的对象), 例如包含参数值的<a href="objects/Array.htm">数组</a>.</p></td>
    </tr>
    <tr id="square-brackets">
      <td style="text-align:center"><strong>x[y]<br>[a, b, c]</strong></td>
      <td>
        <p><strong>项目访问</strong>. 使用参数 <em>y</em>(或代替 <em>y</em> 的多个参数) 获取或设置对象 <em>x</em> 的 <a href="Objects.htm#__Item">__Item</a> 属性(或默认属性). 这通常对应于集合中的数组元素或项目, 其中 <em>y</em> 是项目的索引或键. 项目可以在右方括号后使用任何<a href="#AssignOp">赋值运算符</a>来赋值. 例如, <code>x[y] := z</code>.</p>
        <p><strong>数组标识符</strong>. 如果左方括号前面没有值(或者一个产生值的子表达式), 它被解释为一个数组的开始. 例如, <code>[a, b, c]</code> 等同于 <code>数组(a, b, c)</code>(a, b 和 c 都是变量).</p>
        <p>有关常见用法, 请参阅<a href="Objects.htm#Usage_Simple_Arrays">数组</a>和 <a href="Objects.htm#Usage_Associative_Arrays">Maps</a>.</p>
      </td>
    </tr>
    <tr id="curly-braces">
      <td style="text-align:center"><strong>{a: b, c: d}</strong></td>
      <td>
        <p><strong>对象标识符</strong>. 创建一个<a href="objects/Object.htm">对象</a>. 其中的每一对项目由一个原义的属性名称 <code>a</code> 和一个属性值表达式 <code>b</code> 组成. 例如, <code>x := {a: b}</code> 等同于 <code>x := 对象("a", b)</code> 或 <code>x := 对象(), x.a := b</code>. 可以在对象文本中设置 <a href="objects/Object.htm#Base">Base</a>, 但是所有其他属性都设置为 <em>自有的属性</em>, 可能会覆盖从基对象继承的属性.</p>
        <p>要使用动态属性名, 请将子表达式用百分号括起来. 例如: <code>{%nameVar%: valueVar}</code>.</p>
      </td>
    </tr>
  </table>
  <br>
  <p id="CommaPerf"><strong>性能</strong>: 使用逗号运算符常常比分开写单独的表达式速度更快, 尤其是赋值运算(将一个变量赋值给另一个变量), 例如 <code>x:=y, a:=b</code>. 当越多的表达式联合成单个表达式时, 性能会持续得到提升; 例如, 把五个或十个简单的表达式联合成单个表达式速度可能提升 35%.</p>

  <h2 id="BuiltIn">内置变量</h2>
  <p>下面的变量被内置到程序中, 可以被任何脚本引用.</p>
  <p class="note">有关一般信息, 请参阅<a href="Concepts.htm#built-in-variables">内置变量</a>.</p>
  <h3>目录</h3>
  <ul>
    <li>特殊字符: <a href="#Space">内_空格</a>, <a href="#Tab">内_跳格</a></li>
    <li>脚本属性: <a href="#Args">命令行参数</a>, <a href="#WorkingDir">内_工作目录</a>, <a href="#ScriptDir">内_脚本目录</a>, <a href="#ScriptName">内_脚本名</a>, <a href="#prop">(...更多...)</a></li>
    <li>日期和时间: <a href="#YYYY">内_年</a>, <a href="#MM">内_月</a>, <a href="#DD">内_日</a>, <a href="#Hour">内_时</a>, <a href="#Min">内_分</a>, <a href="#Sec">内_秒</a>, <a href="#date">(...更多...)</a></li>
    <li>脚本设置: <a href="#IsSuspended">内_是否挂起</a>, <a href="#ListLines">内_是否记录行</a>, <a href="#TitleMatchMode">内_标题匹配模式</a>, <a href="#settings">(...更多...)</a></li>
    <li>用户空闲时间: <a href="#TimeIdle">内_空闲时间</a>, <a href="#TimeIdlePhysical">内_物理空闲时间</a>, <a href="#TimeIdleKeyboard">内_键盘空闲时间</a>, <a href="#TimeIdleMouse">内_鼠标空闲时间</a></li>
    <li>热键, 热字串和自定义菜单项: <a href="#ThisHotkey">内_此热键</a>, <a href="#EndChar">内_终止符</a>, <a href="#h">(...更多...)</a></li>
    <li>操作系统和用户信息: <a href="#OSVersion">内_系统版本号</a>, <a href="#Screen">内_屏幕宽</a>, <a href="#Screen">内_屏幕高</a>, <a href="#os">(...更多...)</a></li>
    <li>杂项: <a href="#Clipboard">内_剪贴板</a>, <a href="#Cursor">内_鼠标光标类型</a>, <a href="#EventInfo">内_事件信息</a>, <a href="#misc">(...更多...)</li>
    <li>循环: <a href="#Index">内_循环次数</a>, <a href="#loop">(...更多...)</a></li>
  </ul>
  <h3>特殊字符</h3>
  <table class="info">
    <tr id="Space">
      <td>内_空格</td>
      <td>包含单个空格字符.</td>
    </tr>
    <tr id="Tab">
      <td>内_跳格</td>
      <td>包含单个 tab(制表符) 字符.</td>
    </tr>
  </table>
  <h3 id="prop">脚本属性</h3>
  <table class="info">
    <tr id="Args">
      <td>A_Args</td>
      <td>包含一个命令行参数<a href="Objects.htm#Usage_Simple_Arrays">数组</a>. 有关详情, 请参阅<a href="Scripts.htm#cmd">向脚本传递命令行参数</a>.</td>
    </tr>
    <tr id="WorkingDir">
      <td>内_工作目录</td>
      <td><p>可以用来获取或设置脚本当前工作目录, 这是访问文件的默认路径. 除非是根目录, 否则路径末尾不包含反斜杠. 两个示例: <code>C:\</code> 和 <code>C:\My Documents</code>.</p>
      <p>使用 <a href="commands/SetWorkingDir.htm">设置工作目录</a> 或赋值路径到 内_工作目录 可以改变当前工作目录.</p>
      <p>无论脚本是如何启动的, 脚本的工作目录默认为 内_脚本目录.</p></td>
    </tr>
    <tr id="InitialWorkingDir">
      <td>内_初始工作目录</td>
      <td>脚本的初始工作目录, 由它的启动方式决定. 例如, 如果它是通过快捷方式运行的 -- 比如在开始菜单 -- 它的初始工作目录是由快捷方式属性中的 "起始位置" 字段决定的.</td>
    </tr>
    <tr id="ScriptDir">
      <td>内_脚本目录</td>
      <td>
        <p>当前脚本所在目录的完整路径. 不包含最后的反斜杠(根目录同样如此).</p>
        <p>如果脚本文字是从<a href="Scripts.htm#stdin">标准输入中读取的</a>而不是从文件中读取的, 变量值为<a href="#InitialWorkingDir">初始工作目录</a>.</p></td>
    </tr>
    <tr id="ScriptName">
      <td>内_脚本名</td>
      <td>
        <p>可以用来获取或设置 信息框, 输入框, 文件选择框, 目录选择框 和 界面.新建 的默认标题. 如果脚本没有设置, 它默认为当前脚本的文件名, 不包括路径, 例如 MyScript.ahk.</p>
        <p>如果脚本文字是从<a href="Scripts.htm#stdin">标准输入中读取的</a>而不是从文件中读取的, 默认值为 "*".</p>
      </td>
    </tr>
    <tr id="ScriptFullPath">
      <td>内_脚本全路径</td>
      <td>
        <p>当前脚本的完整路径, 例如 C:\My Documents\My Script.ahk</p>
        <p>如果脚本文字是从<a href="Scripts.htm#stdin">标准输入中读取的</a>而不是从文件中读取的, 值为 "*".</p>
      </td>
    </tr>
    <tr id="ScriptHwnd">
      <td>内_脚本句柄</td>
      <td>脚本的<a href="Program.htm#main-window">主窗口</a>(隐藏的) 的唯一 ID(HWND/句柄).</td>
    </tr>
    <tr id="LineNumber">
      <td>内_当前行号</td>
      <td><p>脚本(或其 <a href="commands/_Include.htm">#导入 文件</a>) 中正在执行的行的行号. 这个行号与 <a href="commands/ListLines.htm">记录列表</a> 显示的一致; 它对于错误报告非常有用, 比如这个例子: <code>信息框 "Could not write to 对数 file (line number " 内_当前行号 ")"</code>.</p>
      <p>由于<a href="Scripts.htm#ahk2exe">已编译脚本</a>已经把它所有的 <a href="commands/_Include.htm">#导入 文件</a>合并成一个大脚本, 所以它的行号可能与它在未编译模式运行时不一样.</p></td>
    </tr>
    <tr id="LineFile">
      <td>内_此文件路径</td>
      <td><a href="#LineNumber">内_当前行号</a> 所属文件的完整路径和名称, 除非当前行属于未编译脚本的某个 <a href="commands/_Include.htm">#导入 文件</a>,  否则它将和 <a href="#ScriptFullPath">内_脚本全路径</a> 相同.</td>
    </tr>
    <tr id="ThisFunc">
      <td>内_此函数</td>
      <td>当前正在执行的<a href="Functions.htm">自定义函数</a>的名称(没有则为空); 例如: MyFunction. 另请参阅: <a href="commands/IsFunc.htm">是否函数</a></td>
    </tr>
    <tr id="AhkVersion">
      <td>内_主程序版本</td>
      <td>包含了运行当前脚本的 AutoHotkey 主程序的版本号, 例如 1.0.22. 在<a href="Scripts.htm#ahk2exe">已编译脚本</a>中, 它包含了原来编译时使用的主程序的版本号. 格式化的版本号使得脚本可以使用 &gt; 或 &gt;= 来检查 内_主程序版本 是否大于某个最小的版本号, 如这个例子所示: <code>如果 (内_主程序版本 &gt;= "1.0.25.07")</code>.</td>
    </tr>
    <tr id="AhkPath">
      <td>内_主程序路径</td>
      <td><p>对于未编译脚本: 实际运行当前脚本的 EXE 文件的完整路径和名称. 例如: C:\Program Files\AutoHotkey\AutoHotkey.exe</p>
      <p>对于<a href="Scripts.htm#ahk2exe">已编译脚本</a>: 除了通过注册表条目 <em>HKLM\SOFTWARE\AutoHotkey\InstallDir</em> 获取 AutoHotkey 目录外, 其他的和上面相同. 如果找不到这个注册表条目, 则 内_主程序路径 为空.</p></td>
    </tr>
    <tr id="IsCompiled">
      <td>内_是否已编译</td>
      <td>如果当前运行的脚本为<a href="Scripts.htm#ahk2exe">已编译 EXE</a> 时, 此变量值为 1, 否则为空字符串(这会被视为 <a href="#Boolean">false</a>).</td>
    </tr>
  </table>
  <h3 id="date">日期和时间</h3>
  <table class="info">
    <tr id="YYYY">
      <td>内_年</td>
      <td>
        <p>4 位数表示的当前年份(例如 2004). 与 内_年 含义相同.</p>
        <p class="note"><strong>注意</strong>: 要检索符合您区域设置和语言的格式化时间或日期, 请使用 <code><a href="commands/FormatTime.htm">格式化时间</a>()</code>(时间和长日期) 或 <code><a href="commands/FormatTime.htm">格式化时间</a>(, "LongDate")</code>(检索长格式日期).</p>
      </td>
    </tr>
    <tr id="MM">
      <td>内_月</td>
      <td>2 位数表示的当前月份(01-12). 与 内_月 含义相同.</td>
    </tr>
    <tr id="DD">
      <td>内_日</td>
      <td>2 位数表示的当前月份的日期(01-31). 与 内_日 含义相同.</td>
    </tr>
    <tr id="MMMM">
      <td>内_月份全称</td>
      <td>使用当前用户语言表示的当前月份的全称, 例如 July</td>
    </tr>
    <tr id="MMM">
      <td>内_月份</td>
      <td>使用当前用户语言表示的当前月份的简称, 例如 Jul</td>
    </tr>
    <tr id="DDDD">
      <td>内_星期全称</td>
      <td>使用当前用户语言表示的当前星期几的全称, 例如, Sunday</td>
    </tr>
    <tr id="DDD">
      <td>内_星期</td>
      <td>使用当前用户语言表示的当前星期几的简称, 例如 Sun</td>
    </tr>
    <tr id="WDay">
      <td>内_周</td>
      <td>1 位数表示的当前星期经过的天数(1-7). 在所有区域设置中 1 都表示星期天.</td>
    </tr>
    <tr id="YDay">
      <td>内_年日</td>
      <td>当前年份中经过的天数(1-366). 不会使用零对变量的值进行填充, 例如检索到 9, 而不是 009. 要检索零填充的值, 请使用: <code><a href="commands/FormatTime.htm">格式化时间</a>(, "YDay0")</code>.</td>
    </tr>
    <tr id="YWeek">
      <td>内_年周</td>
      <td>符合 ISO 8601 标准的当前的年份和周数(例如 200453). 要分离年份和周数, 请使用 <code>Year := <a href="commands/SubStr.htm">截取字符串</a>(内_年周, 1, 4)</code> 和 <code>Week := <a href="commands/SubStr.htm">截取字符串</a>(内_年周, -2)</code>. 内_年周 的准确定义为: 如果含有 1 月 1 日的星期内有四天或四天以上在新年里, 则它被认为是新年的第一个星期. 否则, 它为前一年的最后一个星期, 而下一星期为新年的第一个星期.</td>
    </tr>
    <tr id="Hour">
      <td>内_时</td>
      <td>在 24 小时制(例如, 17 表示 5pm) 中 2 位数表示的当前小时数(00-23). 要获取带 AM/PM 提示的 12 小时制的时间, 请参照此例: <code><a href="commands/FormatTime.htm">格式化时间</a>(, "h:mm:ss tt")</code></td>
    </tr>
    <tr id="Min">
      <td>内_分</td>
      <td><p>2 位数表示的当前分钟数(00-59).</p></td>
    </tr>
    <tr id="Sec">
      <td>内_秒</td>
      <td>2 位数表示的当前秒数(00-59).</td>
    </tr>
    <tr id="MSec">
      <td>内_毫秒</td>
      <td>3 位数表示的当前毫秒数(000-999). 要移除前导零, 请参照此例: <code>Milliseconds := 内_毫秒 + 0</code>.</td>
    </tr>
    <tr id="Now">
      <td>内_时间</td>
      <td>
        <p>以 <a href="commands/FileSetTime.htm#YYYYMMDD">YYYYMMDDHH24MISS</a> 格式表示的当前本地时间.</p>
        <p class="note"><strong>注意</strong>: 可以使用 <a href="commands/DateAdd.htm">时间偏移</a> 和 <a href="commands/DateDiff.htm">取时间差</a> 执行日期和时间的数学运算. 此外, <a href="commands/FormatTime.htm">格式化时间</a> 可以根据您的区域设置或选项来格式化日期和/或时间.</p>
      </td>
    </tr>
    <tr id="NowUTC">
      <td>内_时间UTC</td>
      <td>以 <a href="commands/FileSetTime.htm#YYYYMMDD">YYYYMMDDHH24MISS</a> 格式表示的当前的协调世界时(UTC). UTC 本质上和格林威治标准时间(GMT) 一致.</td>
    </tr>
    <tr id="TickCount">
      <td>内_系统运行时间</td>
      <td><p>计算机自启动以来经过的毫秒数, 最多为 49.7 天. 通过把 内_系统运行时间 保存到变量中, 经过一段时间后从最近的 内_系统运行时间 值中减去那个变量, 可以计算出所经过的时间. 例如:</p>
          <pre>StartTime := 内_系统运行时间
  等待 1000
  ElapsedTime := 内_系统运行时间 - StartTime
  信息框 ElapsedTime " milliseconds have elapsed."</pre>
  <p>如果您需要比 内_系统运行时间 的 10ms 更高的精确度, 请使用 <a href="commands/DllCall.htm#ExQPC">QueryPerformanceCounter()</a>(一个高精度计时器).</p>
  </td>
    </tr>
  </table>
  <h3 id="settings">脚本设置</h3>
  <table class="info">
    <tr id="IsSuspended">
      <td>内_是否挂起</td>
      <td>如果脚本<a href="commands/Suspend.htm">挂起</a>时值为 1, 否则为 0.</td>
    </tr>
    <tr id="IsPaused">
      <td>内_是否暂停</td>
      <td>如果在当前线程之后的<a href="misc/Threads.htm">线程</a>是<a href="commands/Pause.htm">暂停</a>时值为 1, 否则为 0.</td>
    </tr>
    <tr id="IsCritical">
      <td>内_是否中断</td>
      <td>如果<a href="misc/Threads.htm">当前线程</a>的 <a href="commands/Critical.htm">霸体</a> 是关闭时值为 0. 否则值为大于零的整数, 即为 霸体 使用的<a href="commands/Critical.htm#Interval">消息检查频率</a>. 霸体 的当前状态可以通过 <code>Old_IsCritical := 内_是否中断</code> 然后是 <code>内_是否中断 := Old_IsCritical</code> 来保存和恢复.</td>
    </tr>
    <tr id="ListLines">
      <td>内_是否记录行</td>
      <td>可用于获取或设置是否记录行. 可能的值是 0(禁用) 和 1(启用)。有关详情, 请参阅 <a href="commands/ListLines.htm">记录列表</a>.</td>
    </tr>
    <tr id="TitleMatchMode">
      <td>内_标题匹配模式</td>
      <td>可用于获取或设置标题匹配模式. 可能的值是 1, 2, 3 和 RegEx. 有关详情, 请参阅 <a href="commands/SetTitleMatchMode.htm">设置标题匹配模式</a>.</td>
    </tr>
    <tr id="TitleMatchModeSpeed">
      <td>内_标题匹配速度</td>
      <td>可用于获取或设置标题匹配速度. 可能的值是 fast 和 slow. 有关详情, 请参阅 <a href="commands/SetTitleMatchMode.htm">设置标题匹配模式</a>.</td>
    </tr>
    <tr id="DetectHiddenWindows">
      <td>内_检测隐藏窗口</td>
      <td>可用于获取或设置是否检测隐藏窗口. 可能的值是 0(禁止) 和 1(启用). 有关详情, 请参阅 <a href="commands/DetectHiddenWindows.htm">检测隐藏窗口</a>.</td>
    </tr>
    <tr id="DetectHiddenText">
      <td>内_检测隐藏文本</td>
      <td>可以用来获取或设置是否检测窗口中的隐藏文本. 可能的值是 0(禁止) 和 1(启用). 有关详情, 请参阅 <a href="commands/DetectHiddenText.htm">检测隐藏文本</a>.</td>
    </tr>
    <tr id="FileEncoding">
      <td>内_文件编码</td>
      <td>可以用来获取或设置各种内置函数的默认编码. 有关详情, 请参阅 <a href="commands/FileEncoding.htm">设置文件编码</a>.</td>
    </tr>
    <tr id="SendMode">
      <td>内_发送模式</td>
      <td>可用于获取或设置发送模式. 可能的值是 Event, Input, Play 和 InputThenPlay. 有关详情, 请参阅 <a href="commands/SendMode.htm">发送模式</a>.</td>
    </tr>
    <tr id="SendLevel">
      <td>内_发送等级</td>
      <td>可用于获取或设置发送级别, 为 0 至 100 之间的整数, 包括 0 和 100. 有关详情, 请参阅 <a href="commands/SendLevel.htm">发送等级</a>.</td>
    </tr>
    <tr id="StoreCapsLockMode">
      <td>内_保持大写锁定</td>
      <td>可以用来获取或设置是否在 <a href="commands/Send.htm">发送</a> 后恢复 <kbd>CapsLock</kbd> 的状态. 可能的值是 0(禁止) 和 1(启用). 有关详情, 请参阅 <a href="commands/SetStoreCapslockMode.htm">设置大写锁定模式</a>.</td>
    </tr>
    <tr id="KeyDelay">
      <td>内_按键延迟<br>
      内_按键持续时间</td>
      <td>可以用来获取或设置按键的延迟或持续时间, 单位为毫秒. 有关详情, 请参阅 <a href="commands/SetKeyDelay.htm">设置按键延迟</a>.</td>
    </tr>
    <tr id="KeyDelayPlay">
      <td>内_模拟按键延迟<br>
      内_模拟按键持续时间</td>
      <td>可以用来获取或设置通过 <a href="commands/Send.htm#SendPlayDetail">发送模拟</a> 模式发送的按键的延迟或持续时间, 单位为毫秒. 有关详情, 请参阅 <a href="commands/SetKeyDelay.htm">设置按键延迟</a>.</td>
    </tr>
    <tr id="WinDelay">
      <td>内_窗口延迟</td>
      <td>可用于获取或设置窗口函数的延迟, 单位为毫秒. 有关详情, 请参阅 <a href="commands/SetWinDelay.htm">设置窗口延迟</a>.</td>
    </tr>
    <tr id="ControlDelay">
      <td>内_控件延迟</td>
      <td>可用于获取或设置控件修改函数的延迟, 单位为毫秒. 有关详情, 请参阅 <a href="commands/SetControlDelay.htm">设置控件延迟</a>.</td>
    </tr>
    <tr id="MouseDelay">
      <td>内_鼠标延迟<br>
      内_模拟鼠标延迟</td>
      <td>可以用来获取或设置鼠标延迟, 单位为毫秒. 传统的 发送事件 模式为 内_鼠标延迟, 而 <a href="commands/Send.htm#SendPlayDetail">发送模拟</a> 为 内_模拟鼠标延迟. 有关详情, 请参阅 <a href="commands/SetMouseDelay.htm">设置鼠标延迟</a>.</td>
    </tr>
    <tr id="DefaultMouseSpeed">
      <td>内_默认鼠标速度</td>
      <td>可以用来获取或设置默认的鼠标速度, 从 0(最快) 到 100(最慢) 的整数. 有关详情, 请参阅 <a href="commands/SetDefaultMouseSpeed.htm">设置默认鼠标速度</a>.</td>
    </tr>
    <tr id="CoordMode">
      <td>内_提示坐标模式<br>
      内_像素坐标模式<br>
      内_鼠标坐标模式<br>
      内_光标坐标模式<br>
      内_菜单坐标模式</td>
      <td>可以用来获取或设置相对坐标的区域. 可能的值是 Window, Client 或 Screen. 有关详情, 请参阅 <a href="commands/CoordMode.htm">坐标模式</a>.</td>
    </tr>
    <tr id="RegView">
      <td>内_注册表视图</td>
      <td>可用于获取或设置注册表视图. 可能的值是 32, 64 和 Default. 有关详情, 请参阅 <a href="commands/SetRegView.htm">设置注册表视图</a>.</td>
    </tr>
    <tr id="TrayMenu">
      <td>内_托盘菜单</td>
      <td><p>返回可用于修改或显示托盘菜单的<a href="objects/Menu.htm">菜单对象</a>.</p></td>
    </tr>
    <tr id="AllowMainWindow">
      <td>内_允许主窗口</td>
      <td><p>可以用来获取或设置是否允许通过托盘图标打开脚本的主窗口. 可能的值是 0(禁止) 和 1(允许).</p>
      <p>对于<a href="Scripts.htm#ahk2exe">已编译脚本</a>, 此变量默认为 0, 但可以通过给该变量赋值来覆盖它. 将其设置为 1 会激活主窗口 View 菜单下的项目(如 "Lines most recently executed"), 它允许查看脚本的源代码和其他信息.</p>
      <p>当运行时在脚本中遇到以下函数时, 它们总是能够显示主窗口: <a href="commands/ListLines.htm">记录列表</a>, <a href="commands/ListVars.htm">变量列表</a>, <a href="commands/ListHotkeys.htm">热键列表</a> 和 <a href="commands/KeyHistory.htm">按键记录</a>.</p>
      <p>如果脚本没有被编译, 那么这个变量的值始终是 1, 任何对它进行更改的尝试都会被忽略.</p></td>
    </tr>
    <tr id="IconHidden">
      <td>内_隐藏图标</td>
      <td>可以用来获取或设置是否隐藏<a href="Program.htm#tray-icon">托盘图标</a>. 可能的值是 0(可见) 和 1(隐藏). 有关详情, 请参阅 <a href="commands/_NoTrayIcon.htm">#无托盘图标</a>.</td>
    </tr>
    <tr id="IconTip">
      <td>内_图标提示</td>
      <td><p>可用于获取或设置<a href="Program.htm#tray-icon">托盘图标</a>的工具提示文字, 当鼠标悬停在其上时显示该文本. 如果为空, 则使用脚本的名称.</p>
      <p>要创建多行工具提示, 请在每行之间使用换行符(`n), 例如 <code>"Line1`nLine2"</code>. 只显示前 127 个字符, 并且文本在第一个制表符(如果存在) 处被截断.</p></td>
    </tr>
    <tr id="IconFile">
      <td>内_图标文件</td>
      <td>如果通过 <a href="commands/TraySetIcon.htm">设置托盘图标</a> 指定自定义的<a href="Program.htm#tray-icon">托盘图标</a>时, 变量的值为图标文件的完整路径和名称, 否则为空.</td>
    </tr>
    <tr id="IconNumber">
      <td>内_图标编号</td>
      <td>如果 内_图标文件 为空时, 值为空. 否则, 它的值为 内_图标文件 中的图标的编号(通常为 1).</td>
    </tr>
  </table>
  <h3>用户空闲时间</h3>
  <table class="info">
    <tr id="TimeIdle">
      <td>内_空闲时间</td>
      <td>从系统最后一次接收到键盘, 鼠标或其他输入后所经过的毫秒数. 这可以用来判断用户是否离开. 用户的物理输入和由 <strong>任何</strong> 程序或脚本生成的模拟输入(例如 <a href="commands/Send.htm">发送</a> 或 <a href="commands/MouseMove.htm">鼠标移动</a> 函数) 会让此变量重置为零. 由于此变量的值趋向于以 10 的增量增加, 所以不应该判断它是否等于另一个值. 相反, 应该检查此变量是否大于或小于另一个值. 例如:
  <pre>如果 内_空闲时间 &gt; 600000
      信息框 "The last keyboard or mouse activity was at least 10 minutes ago."</pre></td>
    </tr>
    <tr id="TimeIdlePhysical">
      <td>内_物理空闲时间</td>
      <td>与上面类似, 但在安装了相应的钩子(<a href="commands/_InstallKeybdHook.htm">键盘</a>或<a href="commands/_InstallMouseHook.htm">鼠标</a>) 后会忽略模拟的键击和/或鼠标点击; 即此变量仅对物理事件做出响应. (这样避免了由于模拟键击和鼠标点击而误以为用户存在.) 如果两种钩子都没有安装, 则此变量等同于 内_空闲时间. 如果仅安装了一种钩子, 那么仅此类型的物理输入才会对 内_物理空闲时间 起作用(另一种/未安装钩子的输入, 包括物理的和模拟的, 都会被忽略).</td>
    </tr>
    <tr id="TimeIdleKeyboard">
      <td>内_键盘空闲时间</td>
      <td>如果安装了<a href="commands/_InstallKeybdHook.htm">键盘钩子</a>, 这是自系统上次接收物理键盘输入以来所经过的毫秒数. 否则, 这个变量就等于 内_空闲时间.</td>
    </tr>
    <tr id="TimeIdleMouse">
      <td>内_鼠标空闲时间</td>
      <td>如果安装了<a href="commands/_InstallMouseHook.htm">鼠标钩子</a>, 这是自系统上次收到物理鼠标输入以来所经过的毫秒数. 否则, 这个变量就等于 内_空闲时间.</td>
    </tr>
  </table>
  <h3 id="h">热键, 热字串和自定义菜单项</h3>
  <table class="info">
    <tr id="ThisHotkey">
      <td>内_此热键</td>
      <td><p>最近执行的<a href="Hotkeys.htm">热键</a>或<a href="Hotstrings.htm">非自动替换热字串</a>(如果没有则为空), 例如 #z. 如果<a href="misc/Threads.htm">当前线程</a>被其他热键或热字串中断, 那么此变量的值会变化, 所以一般情况下, 最好使用 <a href="Hotkeys.htm#HotBraces">ThisHotkey</a> 参数.</p>
        <p>首次创建热键时 -- 通过 <a href="commands/Hotkey.htm">热键 函数</a>或<a href="Hotkeys.htm">双冒号语法</a> -- 其键名及其修饰符的顺序成为此热键的固定名称, 由热键的所有<a href="commands/_HotIf.htm#variant">变体</a>共享.</p>
        <p>当热字符串是首次创建时, 用于创建它的确切文本将成为热字符串的永久名称.</p>
      </td>
    </tr>
    <tr id="PriorHotkey">
      <td>内_最近热键名</td>
      <td>除了保存前一次热键的名称外, 其他的与上面相同. 如果没有它会为空.</td>
    </tr>
    <tr id="PriorKey">
      <td>内_最近按键名</td>
      <td>在最近一次键-按下或键-释放之前按下的最后一个键的名称, 如果在按键历史中找不到合适的键-按下则为空. 不包括由 AutoHotkey 脚本生成的所有输入. 要使用此变量, 首先必须安装<a href="commands/_InstallKeybdHook.htm">键盘</a>或<a href="commands/_InstallMouseHook.htm">鼠标钩子</a>并且启用了<a href="commands/KeyHistory.htm">key history(按键历史)</a>.</td>
    </tr>
    <tr id="TimeSinceThisHotkey">
      <td>内_距离上次此热键触发时间</td>
      <td>从 内_此热键 按下后到现在经过的毫秒数. 如果 内_此热键 为空, 则此变量的值为 -1.</td>
    </tr>
    <tr id="TimeSincePriorHotkey">
      <td>内_距离上次热键触发时间</td>
      <td>从 内_最近热键名 按下后到现在经过的毫秒数. 如果 内_最近热键名 为空, 则此变量的值为 -1.</td>
    </tr>
    <tr id="EndChar">
      <td>内_终止符</td>
      <td>用户最近按下的触发了<a href="Hotstrings.htm">非自动替换热字串</a>的<a href="Hotstrings.htm#EndChars">终止字符</a>. 如果不需要终止符(由于使用了 * 选项), 那么此变量将为空.</td>
    </tr>
  </table>
  <h3 id="os">操作系统和用户信息</h3>
  <table class="info">
    <tr id="ComSpec">
      <td>内_命令行</td>
      <td><p>包含与环境的 ComSpec 变量相同的字符串. 常与 <a href="commands/Run.htm">Run/RunWait</a> 一起使用. 例如:</p>
        <pre class="NoIndent no-highlight">C:\Windows\system32\cmd.exe</pre>
      </td>
    </tr>
    <tr id="Temp">
      <td>内_临时路径</td>
      <td><p>存放临时文件的文件夹的完整路径和名称. 它的值从下列的其中一个位置检索(按顺序): 1) <a href="Concepts.htm#environment-variables">环境变量</a> TMP, TEMP 或 USERPROFILE; 2) Windows 目录. 例如:</p>
      <pre class="NoIndent no-highlight">C:\Users\&lt;UserName&gt;\AppData\Local\Temp</pre>
    </td>
    </tr>
    <tr id="OSVersion">
      <td>内_系统版本号</td>
      <td>
      <p>操作系统的版本号, 格式为 &quot;<em>major</em>.<em>minor</em>.<em>build</em>&quot;. 例如, Windows 7 SP1 为 6.1.7601.</p>
      <p>在 AutoHotkey 可执行文件或已编译脚本的属性中应用兼容性设置会导致系统报告不同的版本号, 这将体现在 内_系统版本号 中.</p>
      </td>
    </tr>
    <tr id="Is64bitOS">
      <td>内_是否64位系统</td>
      <td>当操作系统为 64 位则值为 1(true), 为 32 位则为 0(false).</td>
    </tr>
    <tr id="PtrSize">
      <td>内_指针大小</td>
      <td>包含指针的大小值, 单位为字节. 值为 4(32 位) 或 8(64 位), 取决于运行当前脚本的执行程序的类型.</td>
    </tr>
    <tr id="Language">
      <td>内_语言</td>
      <td>当前系统的默认语言, 值为<a href="misc/Languages.htm">这些 4 位数字编码</a>的其中一个.</td>
    </tr>
    <tr id="ComputerName">
      <td>内_剪贴板</td>
      <td>在网络上看到的计算机名称.</td>
    </tr>
    <tr id="UserName">
      <td>内_用户名</td>
      <td>运行当前脚本的用户的登录名.</td>
    </tr>
    <tr id="WinDir">
      <td>内_系统目录</td>
      <td>Windows 目录. 例如: <code>C:\Windows</code></td>
    </tr>
    <tr id="ProgramFiles">
      <td>内_程序文件</td>
      <td>
        <p>Program Files 目录(例如 <code>C:\Program Files</code> 或 <code>C:\Program Files (x86)</code>). 这通常与 <em>ProgramFiles</em> <a href="Concepts.htm#environment-variables">环境变量</a>相同.</p>
        <p>在 <a href="#Is64bitOS">64-位系统</a>(和非 32-位系统), 适用于下列内容:</p>
        <ul>
          <li>如果可执行文件(EXE) 以 32 位脚本运行的时候, 内_程序文件 返回路径为 "Program Files (x86)" 目录.</li>
          <li>对于 32 位的进程, <em>ProgramW6432</em> 环境变量指向 64 位 Program Files 目录的路径. 在 Windows 7 和更高版本上, 对于 64 位的进程也是这样设置的.</li>
          <li><em>ProgramFiles(x86)</em> 环境变量指向 32 位 Program Files 目录的路径.</li>
        </ul>
      </td>
    </tr>
    <tr id="AppData">
      <td>内_应用数据</td>
      <td>
        <p>当前用户的应用程序数据文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\Users\&lt;UserName&gt;\AppData\Roaming</pre>
      </td>
    </tr>
    <tr id="AppDataCommon">
      <td>内_常规应用数据</td>
      <td>
        <p>所有用户的应用程序数据文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\ProgramData</pre>
      </td>
    </tr>
    <tr id="Desktop">
      <td>内_桌面</td>
      <td>
        <p>当前用户的桌面文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\Users\&lt;UserName&gt;\Desktop</pre>
      </td>
    </tr>
    <tr id="DesktopCommon">
      <td>内_常规桌面</td>
      <td>
        <p>所有用户的桌面文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\Users\Public\Desktop</pre>
      </td>
    </tr>
    <tr id="StartMenu">
      <td>内_开始菜单</td>
      <td>
        <p>当前用户的开始菜单文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\Users\&lt;UserName&gt;\AppData\Roaming\Microsoft\Windows\Start Menu</pre>
      </td>
    </tr>
    <tr id="StartMenuCommon">
      <td>内_常规开始菜单</td>
      <td>
        <p>所有用户的开始菜单文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\ProgramData\Microsoft\Windows\Start Menu</pre>
      </td>
    </tr>
    <tr id="Programs">
      <td>内_程序</td>
      <td>
        <p>当前用户的开始菜单中程序文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\Users\&lt;UserName&gt;\AppData\Roaming\Microsoft\Windows\Start Menu\Programs</pre>
      </td>
    </tr>
    <tr id="ProgramsCommon">
      <td>内_常规程序</td>
      <td>
        <p>所有用户的开始菜单中程序文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\ProgramData\Microsoft\Windows\Start Menu\Programs</pre>
    </td>
    </tr>
    <tr id="Startup">
      <td>内_启动</td>
      <td>
        <p>当前用户的开始菜单中启动文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\Users\&lt;UserName&gt;\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup</pre>
    </td>
    </tr>
    <tr id="StartupCommon">
      <td>内_常规启动</td>
      <td>
        <p>所有用户的开始菜单中启动文件夹的完整路径和名称. 例如:</p>
        <pre class="NoIndent no-highlight">C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup</pre>
    </td>
    </tr>
    <tr id="MyDocuments">
      <td>内_我的文档</td>
      <td>
        <p>当前用户 &quot;我的文档&quot; 文件夹的完整路径和名称. 与大多数类似变量不同, 当此文件夹为驱动器的根目录时, 此变量的值不包含最后的反斜杠(例如, 它的值是 <code>M:</code> 而不是 <code>M:\</code>). 例如:</p>
        <pre class="NoIndent no-highlight">C:\Users\&lt;UserName&gt;\Documents</pre>
    </td>
    </tr>
    <tr id="IsAdmin">
      <td>内_是否管理员</td>
      <td><p>如果当前用户有管理员权限, 则此变量的值为 1. 否则为 0.</p>
      <p id="RequireAdmin">要使脚本以管理员权限重新启动(或显示提示向用户请求管理员权限), 请使用 <a href="commands/Run.htm#RunAs">运行 *RunAs</a>. 但是请注意, 以管理员权限运行脚本会导致脚本启动的所有程序也以管理员权限运行. 对于可能的替代方案, 请参阅<a href="FAQ.htm#uac">常见问题(FAQ)</a>.</p>
      </td>
    </tr>
    <tr id="Screen">
      <td><p>内_屏幕宽<br>
      内_屏幕高</p></td>
      <td><p>主监视器的宽度和高度, 单位为像素(例如 1024 和 768).</p>
        <p>要获取多显示器系统中其他显示器的尺寸, 请使用 <a href="commands/SysGet.htm">获取系统属性</a>.</p>
        <p>要获取整个桌面(即使它横跨多个显示器) 的宽度和高度, 请使用下面的例子:</p>
  <pre>
  VirtualWidth := <a href="commands/SysGet.htm">获取系统属性</a>(78)
  VirtualHeight := <a href="commands/SysGet.htm">获取系统属性</a>(79)
  </pre>
      <p>此外, 使用 <a href="commands/SysGet.htm">获取系统属性</a> 可以获取显示器的工作区域, 它比显示器的整个区域小, 因为它不包括任务栏和其他注册的桌面工具栏.</p></td>
    </tr>
    <tr id="ScreenDPI">
      <td>内_屏幕像素密度</td>
      <td>沿屏幕宽度每逻辑英寸的像素数. 在具有多个显示监视器的系统中, 此值对于所有监视器都是相同的.在大多数系统中该值为 96; 它取决于系统文本大小(DPI) 设置. 另请参阅 界面 的 <a href="objects/Gui.htm#DPIScale">-DPIScale</a> 选项.</td>
    </tr>
  </table>
  <h3 id="misc">杂项</h3>
  <table class="info">
    <tr id="Clipboard">
      <td>内_剪贴板</td>
      <td>可用于获取或设置系统剪贴板的内容. 有关详情, 请参阅 <a href="misc/A_Clipboard.htm">内_剪贴板</a>.</td>
    </tr>
    <tr id="Cursor">
      <td>内_鼠标光标类型</td>
      <td><p>当前显示的鼠标光标类型. 其值为下列单词的其中一个: AppStarting(程序启动, 后台运行--箭头+等待), Arrow(箭头, 正常选择--标准光标), Cross(十字, 精确选择), Help(帮助, 帮助选择--箭头+问号), IBeam(工字光标, 文本选择--输入), Icon, No(No, 不可用--圆圈加反斜杠), Size, SizeAll(所有尺寸,移动--四向箭头), SizeNESW(东南和西北尺寸, 沿对角线调整 2--双箭头指向东南和西北), SizeNS(南北尺寸, 垂直调整--双箭头指向南北), SizeNWSE(西北和东南尺寸, 沿对角线调整 1--双箭头指向西北和东南), SizeWE(东西尺寸, 水平调整--双箭头指向东西), UpArrow(向上箭头, 候选--指向上的箭头), Wait(等待, 忙--沙漏或圆圈), Unknown(未知). 与 size-类型 光标一起使用的缩略词是罗盘方向, 例如 NESW = NorthEast(东北)+SouthWest(西南). 手型指针(点击和抓取) 属于 Unknown 类别.</p></td>
    </tr>
    <tr id="EventInfo">
      <td>内_事件信息</td>
      <td><p>包含下列事件的额外信息:</p>
        <ul>
          <li><a href="Hotkeys.htm#Wheel">鼠标滚轮热键</a>(WheelDown/Up/Left/Right)</li>
          <li><a href="commands/OnMessage.htm">在收到消息时</a></li>
          <li><a href="misc/RegExCallout.htm">Regular Expression Callouts</a></li>
        </ul>
        <p>注意: 与类似 内_此热键 这样的变量不同, 每个<a href="misc/Threads.htm">线程</a>保留自身的 内_事件信息 值. 因此, 如果一个线程被另一个中断, 在这个线程恢复时它仍将看到这些变量的原来/正确的值.</p>
        <p>脚本也可以设置 内_事件信息, 但只能在指针可用的范围内接受无符号整数(32-bit 或 64-bit 取决于 AutoHotkey 的版本).</p></td>
    </tr>
    <tr id="LastError">
      <td>内_错误代码</td>
      <td><p>这通常是脚本调用某些函数(如 动态库调用 或 Run/RunWait), 或上一次 COM 对象调用的 HRESULT 之后, 系统的 GetLastError() 函数的结果. 内_错误代码 是一个介于 0 和 4294967295 之间的数字(通常格式化为十进制, 而不是十六进制). 零(0) 表示成功, 但是任何其他数字都表示调用失败. 每个数字对应一个特定的错误条件(要获得列表, 请搜索 <a href="http://www.microsoft.com">www.microsoft.com</a> 中的 &quot;系统错误代码&quot;). 内_错误代码 是每个线程的设置; 也就是说, 被其他<a href="misc/Threads.htm">线程</a>中断不能改变它.</p>
      <p>给 内_错误代码 赋值, 也会调用系统的 SetLastError() 函数.</p></td>
    </tr>
    <tr id="TrueFalse">
      <td>真<br />假</td>
      <td><p>包含 1 和 0. 它们可以用来使脚本更具可读性. 有关详情, 请参阅<a href="Concepts.htm#boolean">布尔值</a>.</p>
        <p>这些实际上是<a href="Language.htm#constants">关键字</a>, 而不是变量.</p>
      </td>
    </tr>
  </table>
  <h3 id="loop">循环</h3>
  <table class="info">
    <tr id="Index">
      <td>内_循环次数</td>
      <td>可用于获取或设置当前循环迭代(64 位整数). 例如, 当脚本首次执行此循环体时, 此变量的值为 1. 要了解详情, 请参阅 <a href="commands/Loop.htm">循环</a> 或 <a href="commands/While.htm">While-loop</a>.</td>
    </tr>
    <tr>
      <td>内_遍历文件名, 等</td>
      <td>此变量和其他相关变量仅在<a href="commands/LoopFiles.htm">文件循环</a>中有效.</td>
    </tr>
    <tr>
      <td>内_遍历注册表名, 等</td>
      <td>此变量和其他相关变量仅在<a href="commands/LoopReg.htm">注册表循环</a>中有效.</td>
    </tr>
    <tr>
      <td>内_循环读取行</td>
      <td>请参阅<a href="commands/LoopRead.htm">文件读取循环</a>.</td>
    </tr>
    <tr>
      <td>内_循环属性</td>
      <td>请参阅<a href="commands/LoopParse.htm">解析循环</a>.</td>
    </tr>
  </table>

  <h2 id="cap">变量的容量和占用内存</h2>
  <ul>
    <li>当赋值给变量比当前更长的内容时, 会自动分配额外的系统内存给这个变量.</li>
    <li>通过赋值为空, 可以释放大变量占用的内存, 例如 <code>变量 := &quot;&quot;</code>.</li>
    <li>脚本可以创建的变量数量没有限制. 程序设计用来支持至少几百万的变量而不会出现明显的性能下降.</li>
    <li>接受数字输入的函数和表达式通常支持 15 位的浮点数精度. 对于整数, 可以支持 64 位有符号整数, 其范围从 -9223372036854775808(-0x8000000000000000) 到 9223372036854775807(0x7FFFFFFFFFFFFFFF). 任何超出此范围的整数常量都将回绕. 同样的, 整数的算数运算结果超出此范围时会溢出回绕(例如 0x7FFFFFFFFFFFFFFF + 1 = -0x8000000000000000).</li>
  </ul>
  </body>
  </html>